#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

//https://leetcode.cn/problems/design-circular-queue/submissions/415588045/
//typedef struct {
//    int* data;
//    int front;
//    int rear;
//    int k;
//} MyCircularQueue;
//
//
//MyCircularQueue* myCircularQueueCreate(int k) {
//    MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));
//    obj->data = (int*)malloc(sizeof(int) * (k + 1));
//    obj->front = obj->rear = 0;
//    obj->k = k;
//    return obj;
//}
//
//bool myCircularQueueIsFull(MyCircularQueue* obj) {
//    if ((obj->rear - obj->front + obj->k + 1) % (obj->k + 1) == obj->k)
//        return true;
//    else
//        return false;
//}
//
//bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
//    if (myCircularQueueIsFull(obj)) {
//        return false;
//    }
//    else {
//        obj->data[obj->rear++] = value;
//        obj->rear %= obj->k + 1;
//        return true;
//    }
//}
//
//bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
//    return obj->front == obj->rear;
//}
//
//bool myCircularQueueDeQueue(MyCircularQueue* obj) {
//    if (myCircularQueueIsEmpty(obj))
//        return false;
//    else {
//        obj->front++;
//        obj->front %= obj->k + 1;
//        return true;
//    }
//}
//
//int myCircularQueueFront(MyCircularQueue* obj) {
//    if (myCircularQueueIsEmpty(obj))
//        return -1;
//    else
//        return obj->data[obj->front];
//}
//
//int myCircularQueueRear(MyCircularQueue* obj) {
//    if (myCircularQueueIsEmpty(obj))
//        return -1;
//    else {
//        return obj->data[(obj->rear + obj->k) % (obj->k + 1)];
//    }
//}
//
//void myCircularQueueFree(MyCircularQueue* obj) {
//    free(obj->data);
//}
//int main() {
//    MyCircularQueue* p = myCircularQueueCreate(8);
//    myCircularQueueEnQueue(p, 3);
//    myCircularQueueEnQueue(p, 9);
//    myCircularQueueEnQueue(p, 5);
//    myCircularQueueEnQueue(p, 0);
//    myCircularQueueDeQueue(p);
//    myCircularQueueDeQueue(p);
//    myCircularQueueIsEmpty(p);
//    myCircularQueueIsEmpty(p);
//    int a = myCircularQueueRear(p);
//    int b = myCircularQueueRear(p);
//    return 0;
//}